package cn.itcast.test;

public class ExtendDemo {
    public static void main(String[] args) {
        DemoFather f = new DemoSon();//1a2b

        f = new DemoSon();//2b

        System.out.println("==============");
        DemoFather father = new DemoFather();// 1 2
        father = new DemoSon(); //a2b

        DemoSon son = new DemoSon();//单独1a2b 跟上面一起2b
        //单独创建子类对象时 初始化过程
         /*
         * 1 父类static 块/变量
         * 2 子类static 块/变量
         * 3 父类字节码文件剩下的部分（父类实例变量 和非static块）
         * 4 父类对应构造函数。当子类对应的构造函数中没有显示调用时，调用父类默认的构造函数。
         * 5 子类字节码文件剩下的部分（父类实例变量 和非static块）
         * 6 子类构造函数
         * 总而言之，子类对象初始化时 先加载父类static区 再加载子类static区
         * 再加载父类字节码文件剩下的部分和子类字节码文件剩下的部分。
         * */
        //System.out.println(test());
    }
    public static int test(){
        int i=1;
        try{
            return i/0;
        }catch (Exception e){
            System.out.println("c"+i);
            ++i;
            return i;
        }finally {
            System.out.println(i++);
            System.out.println("f"+i);
        }
    }
}
